Apex Unit Testing (Apex Unit Testing)

Computer Programming - এপেক্স (Apex)
278
278

Apex Unit Testing হলো Apex কোডের নির্দিষ্ট অংশের সঠিকতা যাচাই করার একটি পদ্ধতি, যা নিশ্চিত করে যে কোড সঠিকভাবে কাজ করছে এবং ভবিষ্যতে পরিবর্তন হলেও ত্রুটি বা সমস্যা সৃষ্টি হবে না। Salesforce প্ল্যাটফর্মে Apex কোড ডেপ্লয় করার আগে ৭৫% কোড কাভারেজ থাকতে হয়, যা ইউনিট টেস্টিংয়ের মাধ্যমে নিশ্চিত করা যায়।


Apex Unit Testing এর প্রয়োজনীয়তা

  1. কোডের গুণগত মান উন্নত করা: ইউনিট টেস্টিং নিশ্চিত করে যে কোড যথাযথভাবে কাজ করছে এবং উন্নত গুণগত মান বজায় রাখছে।
  2. ত্রুটি সনাক্তকরণ ও সমাধান: কোড ডেপ্লয় করার আগে ত্রুটি সনাক্ত করা যায়, যা ত্রুটিমুক্ত কোড নিশ্চিত করে।
  3. Maintenance ও Scalability: টেস্টিংয়ের মাধ্যমে কোড বেসের স্থায়িত্ব ও স্কেলেবলিটি বৃদ্ধি পায়, ফলে ভবিষ্যতে সহজে পরিবর্তন করা যায়।
  4. Deployment Requirement পূরণ: Salesforce প্ল্যাটফর্মে ডেপ্লয় করার জন্য কমপক্ষে ৭৫% কোড কাভারেজ থাকা বাধ্যতামূলক।

Apex Unit Test এর গঠন

Apex Unit Test-এ টেস্ট ক্লাস তৈরি করা হয়, যা @isTest অ্যানোটেশন দিয়ে শুরু হয় এবং টেস্ট মেথডগুলো @isTest বা testMethod কিওয়ার্ড ব্যবহার করে ডিফাইন করা হয়।

@isTest
public class TestClassName {
    @isTest
    static void testMethod1() {
        // টেস্টিং কোড
    }
}
  • @isTest: টেস্ট ক্লাস বা মেথডে অ্যানোটেশন হিসেবে ব্যবহৃত হয়।
  • static: টেস্ট মেথড static হতে হবে।
  • void: টেস্ট মেথড কিছু রিটার্ন করে না।

Apex Unit Testing এর উদাহরণ

নিচে একটি উদাহরণ দেয়া হলো, যেখানে AccountManager ক্লাসের updateAccountIndustry মেথডের জন্য ইউনিট টেস্ট লেখা হয়েছে।

Main Class: AccountManager

public class AccountManager {
    public static void updateAccountIndustry(List<Id> accountIds) {
        List<Account> accounts = [SELECT Id, Industry FROM Account WHERE Id IN :accountIds];
        for (Account acc : accounts) {
            acc.Industry = 'Technology';
        }
        update accounts;
    }
}

Test Class: AccountManagerTest

@isTest
public class AccountManagerTest {
    @isTest
    static void testUpdateAccountIndustry() {
        // টেস্ট ডেটা তৈরি
        Account acc = new Account(Name = 'Test Account');
        insert acc;

        // মেথড কল এবং টেস্ট
        List<Id> accountIds = new List<Id>{acc.Id};
        AccountManager.updateAccountIndustry(accountIds);

        // রেকর্ড রিফ্রেশ এবং যাচাই
        Account updatedAcc = [SELECT Industry FROM Account WHERE Id = :acc.Id];
        System.assertEquals('Technology', updatedAcc.Industry, 'Industry field should be updated to Technology');
    }
}
  • testUpdateAccountIndustry: এই মেথড AccountManager.updateAccountIndustry মেথডকে টেস্ট করে, যেখানে Industry ফিল্ডটি Technology হিসেবে আপডেট হয়েছে কি না, তা যাচাই করা হয়েছে।
  • System.assertEquals: Industry ফিল্ডের ভ্যালু যাচাই করা হয়েছে, যা টেস্টিংয়ে গুরুত্বপূর্ণ।

Apex Unit Testing এর প্রধান উপাদান

Test Data Creation: টেস্টিংয়ের জন্য নিজস্ব ডেটা তৈরি করতে হয় এবং এটি মূল ডেটাবেসে প্রভাব ফেলে না।

Assertions: System.assertEquals(), System.assertNotEquals(), এবং System.assert() মেথড ব্যবহার করে ফলাফল যাচাই করা হয়, যা টেস্টিংয়ের নির্ভুলতা নিশ্চিত করে।

Test Isolation: Salesforce Unit Test-এ টেস্ট ডেটা মূল ডেটাবেসে জমা হয় না এবং টেস্ট ক্লাসের ডেটা পুরোপুরি আলাদা থাকে।

Test.startTest() এবং Test.stopTest(): এটি ব্যবহার করে Async প্রসেস এবং Governor Limits ম্যানেজ করা হয়।

উদাহরণ: Test.startTest() এবং Test.stopTest()

@isTest
public class AsyncTestExample {
    @isTest
    static void testFutureMethod() {
        Test.startTest();
        FutureExample.processFuture();
        Test.stopTest();
        
        // Assertions
        System.assert(true, 'Future method executed successfully');
    }
}
  • Test.startTest() এবং Test.stopTest(): Async প্রসেসের জন্য কোড আলাদা করা হয়েছে, যা Future Method পরীক্ষা করে।

Apex Unit Testing এর ভালো অনুশীলন

  1. সবচেয়ে সাধারণ পরিস্থিতি এবং প্রান্তিক ক্ষেত্র যাচাই করুন: সাধারণ পরিস্থিতি এবং এক্সট্রিম কেসগুলো টেস্ট করুন।
  2. 100% কোড কাভারেজের লক্ষ্য রাখুন: Salesforce-এ ৭৫% কোড কাভারেজ আবশ্যক হলেও, সর্বাধিক কভারেজের লক্ষ্য রাখুন।
  3. Assertions ব্যবহার করুন: প্রত্যেক টেস্ট মেথডে Assertions ব্যবহার করুন, যাতে সঠিক ফলাফল নিশ্চিত হয়।
  4. Separate Test Data তৈরি করুন: Production ডেটার উপর নির্ভর না করে আলাদা টেস্ট ডেটা তৈরি করুন।

Unit Testing এর সুবিধা

  1. বাগ সনাক্তকরণ ও প্রতিরোধ: ত্রুটি সনাক্ত করে এবং Production এ যাওয়ার আগে সমস্যার সমাধান করতে সহায়ক।
  2. কোড পরিবর্তন করার সময় স্থায়িত্ব: নতুন ফিচার যোগ করলে বা পরিবর্তন করলে কোডে সমস্যা তৈরি হবে কিনা তা যাচাই করা যায়।
  3. গভর্নর লিমিট নিশ্চিত করা: টেস্ট মেথডে গভর্নর লিমিট অতিক্রম না করার বিষয়ে নিশ্চিত হওয়া যায়।
  4. ডেপ্লয়মেন্ট রিকোয়ারমেন্ট পূরণ: Salesforce ডেপ্লয়মেন্ট রিকোয়ারমেন্ট হিসেবে ৭৫% কোড কাভারেজ পূরণ নিশ্চিত হয়।

সারসংক্ষেপ

Apex Unit Testing হলো একটি গুরুত্বপূর্ণ প্রক্রিয়া, যা Apex কোডের সঠিকতা যাচাই করে। Unit Testing এর মাধ্যমে কোডের গুণগত মান বজায় রাখা, ত্রুটি সনাক্তকরণ, এবং ডেপ্লয়মেন্ট রিকোয়ারমেন্ট পূরণ নিশ্চিত করা যায়। Assertions, Test.startTest() এবং Test.stopTest() সহ টেস্ট ক্লাসে বিভিন্ন টুল ব্যবহার করে Apex কোডের কার্যক্ষমতা এবং নির্ভরযোগ্যতা বৃদ্ধি করা যায়।

Content added By

Apex Unit Test কী এবং কেন গুরুত্বপূর্ণ

204
204

Apex Unit Test হলো Apex কোডের নির্দিষ্ট অংশের কার্যকারিতা যাচাই করার একটি পদ্ধতি, যা প্রোগ্রামের নির্দিষ্ট লজিক বা ফাংশনালিটি সঠিকভাবে কাজ করছে কিনা তা নিশ্চিত করে। Salesforce-এ Unit Test তৈরি করা বাধ্যতামূলক এবং এটি প্রোডাকশন ডিপ্লয়মেন্টের জন্য অত্যন্ত গুরুত্বপূর্ণ।


Apex Unit Test এর মূল ধারণা

Apex Unit Test-এর মাধ্যমে কোডের নির্দিষ্ট অংশে কৃত্রিম ইনপুট দিয়ে আউটপুট যাচাই করা হয় এবং নিশ্চিত করা হয় যে কোডটি সঠিকভাবে কাজ করছে। এতে Test Class এবং Test Method ব্যবহার করা হয়, যা @isTest অ্যানোটেশন দিয়ে চিহ্নিত করা হয়।


Apex Unit Test কেন গুরুত্বপূর্ণ?

বাগ সনাক্তকরণ ও সমাধান: Unit Test চালানোর মাধ্যমে কোডে কোনো বাগ বা ত্রুটি থাকলে তা দ্রুত সনাক্ত করা যায় এবং সমাধান করা সহজ হয়।

কোডের সঠিকতা নিশ্চিতকরণ: Unit Test কোডের প্রত্যাশিত আউটপুট যাচাই করে এবং নিশ্চিত করে যে কোডটি সঠিকভাবে কাজ করছে।

ডিপ্লয়মেন্টের পূর্ব প্রস্তুতি: Salesforce প্রোডাকশন ডিপ্লয়মেন্টের জন্য কমপক্ষে ৭৫% কোড কভারেজ থাকা বাধ্যতামূলক, যা Unit Test-এর মাধ্যমে অর্জন করা যায়।

পরিবর্তনের সময় কোডের স্থায়িত্ব: যখন কোডে কোনো পরিবর্তন করা হয় বা নতুন ফিচার যোগ করা হয়, তখন Unit Test চালিয়ে নিশ্চিত করা যায় যে কোড পরিবর্তনের ফলে কোনো বিদ্যমান কার্যক্ষমতায় সমস্যা হচ্ছে না।

গভর্নর লিমিট টেস্টিং: Salesforce গভর্নর লিমিট মেনে চলতে Unit Test গুরুত্বপূর্ণ, কারণ এটি লিমিটের মধ্যে কোড সঠিকভাবে কাজ করছে কিনা যাচাই করে।


Apex Unit Test এর গঠন

Apex Unit Test ক্লাস এবং মেথডে সাধারণত @isTest অ্যানোটেশন ব্যবহার করা হয়। Unit Test মেথডে টেস্ট ডেটা তৈরি, পরীক্ষিত মেথড কল করা এবং System.assertEquals() ব্যবহার করে ফলাফল যাচাই করা হয়।

@isTest
public class AccountHandlerTest {
    
    // Test Method
    @isTest
    static void testUpdateAccountIndustry() {
        // টেস্ট ডেটা তৈরি
        Account acc = new Account(Name = 'Tech Solutions', Industry = 'Healthcare');
        insert acc;
        
        // পরীক্ষিত মেথড কল
        AccountHandler.updateAccountIndustry(acc.Id, 'Technology');
        
        // প্রত্যাশিত ফলাফল যাচাই
        Account updatedAcc = [SELECT Industry FROM Account WHERE Id = :acc.Id];
        System.assertEquals('Technology', updatedAcc.Industry, 'Industry field did not update correctly');
    }
}
  • @isTest: Test Class এবং Method নির্দেশ করতে ব্যবহৃত হয়।
  • testUpdateAccountIndustry: একটি টেস্ট মেথড, যেখানে AccountHandler.updateAccountIndustry() মেথডের কার্যকারিতা যাচাই করা হয়েছে।
  • System.assertEquals(): প্রত্যাশিত এবং প্রাপ্ত আউটপুট তুলনা করে এবং ফলাফল সঠিক কিনা যাচাই করে।

Apex Unit Test এর গুরুত্বপূর্ণ অংশ

Test Class এবং Method: Unit Test ক্লাস এবং মেথডকে @isTest অ্যানোটেশন দিয়ে চিহ্নিত করতে হয়।

Test Data Creation: Unit Test চালানোর জন্য নতুন ডেটা তৈরি করা হয়, যা মূল ডেটাবেসে কোনো পরিবর্তন আনে না। Salesforce-এ Unit Test চলাকালীন Test Data তৈরি করতে SeeAllData=false ব্যবহার করা হয়।

System.assert() Methods: System.assertEquals() বা System.assertNotEquals() ব্যবহার করে প্রত্যাশিত এবং প্রাপ্ত আউটপুট তুলনা করা হয়।

Test.startTest() এবং Test.stopTest(): Unit Test-এর ক্ষেত্রে গভর্নর লিমিট রিসেট এবং Async অপারেশন চালানোর জন্য Test.startTest() এবং Test.stopTest() ব্যবহৃত হয়।


Apex Unit Test এর উদাহরণ

নিচের উদাহরণে ContactHandler ক্লাসে updateContactEmail মেথড টেস্ট করা হয়েছে, যা কন্টাক্টের ইমেইল আপডেট করে।

Test Class

@isTest
public class ContactHandlerTest {
    @isTest
    static void testUpdateContactEmail() {
        // Test Data তৈরি
        Contact con = new Contact(FirstName = 'John', LastName = 'Doe', Email = 'john.doe@example.com');
        insert con;

        // মেথড টেস্ট করা হচ্ছে
        ContactHandler.updateContactEmail(con.Id, 'john.new@example.com');

        // আউটপুট যাচাই করা হচ্ছে
        Contact updatedCon = [SELECT Email FROM Contact WHERE Id = :con.Id];
        System.assertEquals('john.new@example.com', updatedCon.Email, 'Email did not update correctly');
    }
}
  • testUpdateContactEmail: এই টেস্ট মেথডে ContactHandler.updateContactEmail() মেথডের কার্যক্ষমতা যাচাই করা হয়েছে।
  • System.assertEquals(): প্রত্যাশিত এবং প্রাপ্ত আউটপুটের তুলনা করে সঠিকভাবে ইমেইল আপডেট হয়েছে কিনা নিশ্চিত করা হয়েছে।

ভালো অনুশীলন

SeeAllData=false: Unit Test-এর ক্ষেত্রে SeeAllData=false ব্যবহার করে নিশ্চিত করা উচিত যে, Test Data মূল ডেটাবেসে কোনো প্রভাব ফেলছে না।

Test Coverage নিশ্চিত করুন: Production ডিপ্লয়মেন্টের জন্য কমপক্ষে ৭৫% কোড কভারেজ থাকা বাধ্যতামূলক। তাই Unit Test তৈরি করে সর্বোচ্চ কোড কভারেজ নিশ্চিত করা উচিত।

System.assert ব্যবহার করুন: প্রত্যাশিত এবং প্রাপ্ত ফলাফল যাচাই করতে System.assert() ব্যবহার করুন, যাতে Unit Test সঠিক আউটপুট যাচাই করতে পারে।

Exception Handling টেস্ট করুন: Exception Handling-এর ক্ষেত্রে নিশ্চিত হন যে Unit Test এর মাধ্যমে Exception সঠিকভাবে হ্যান্ডেল হচ্ছে।

গভর্নর লিমিটের মধ্যে টেস্টিং: গভর্নর লিমিটের সীমার মধ্যে কোড সঠিকভাবে কাজ করছে কিনা যাচাই করতে Test.startTest() এবং Test.stopTest() ব্যবহার করুন।


সংক্ষেপে

  • Apex Unit Test হলো Apex কোডের নির্দিষ্ট অংশের কার্যকারিতা যাচাই করার একটি প্রক্রিয়া।
  • এটি কোডের সঠিকতা, কার্যক্ষমতা, এবং গভর্নর লিমিট মেনে চলার জন্য অত্যন্ত গুরুত্বপূর্ণ।
  • Unit Test কোড কভারেজ নিশ্চিত করে এবং Production ডিপ্লয়মেন্টের জন্য কমপক্ষে ৭৫% কভারেজ থাকা বাধ্যতামূলক।

Apex Unit Test ব্যবহার করে উন্নয়নকারীরা Salesforce অ্যাপ্লিকেশনকে আরও কার্যকর ও স্থিতিশীল করতে পারেন এবং Production ডিপ্লয়মেন্টের সময় নিরাপত্তা ও নির্ভরযোগ্যতা নিশ্চিত করতে পারেন।

Content added By

Test Classes এবং Test Methods এর ব্যবহার

244
244

Test Classes এবং Test Methods Apex কোডের কার্যকারিতা যাচাই করতে ব্যবহৃত হয়। Salesforce-এ ইউনিট টেস্টিংয়ের জন্য Test Classes এবং Test Methods তৈরি করা হয়, যা কোডের সঠিকতা এবং গভর্নর লিমিটের মধ্যে থেকে কোডের কার্যকারিতা নিশ্চিত করে।


Test Classes এবং Test Methods এর মূল উদ্দেশ্য

  1. কোডের সঠিকতা যাচাই করা: Test Classes এবং Test Methods কোডের নির্ভুলতা নিশ্চিত করে, যা কোডের গুণগত মান উন্নত করে।
  2. ত্রুটি সনাক্তকরণ ও প্রতিরোধ: ডেপ্লয়মেন্টের আগে ত্রুটি সনাক্ত করতে সহায়ক।
  3. গভর্নর লিমিট মেনে চলা: টেস্ট মেথডের মাধ্যমে গভর্নর লিমিটের মধ্যে কোড কাজ করছে কিনা তা যাচাই করা যায়।
  4. কোড কাভারেজ নিশ্চিত করা: Salesforce-এ ডেপ্লয়মেন্টের জন্য ৭৫% কোড কাভারেজ নিশ্চিত করা প্রয়োজন, যা Test Classes ও Methods দিয়ে অর্জন করা যায়।

Test Classes এর গঠন

Test Class তৈরি করতে @isTest অ্যানোটেশন ব্যবহার করা হয়, যা Salesforce-কে নির্দেশ করে এটি একটি টেস্ট ক্লাস। Test Class সাধারণত public বা global হিসাবে ডিফাইন করা হয়।

@isTest
public class TestClassName {
    // Test methods go here
}
  • @isTest: এটি টেস্ট ক্লাস ও মেথড নির্দেশ করতে ব্যবহৃত হয়।
  • public class: Test Class সাধারণত public বা global হিসেবে ডিফাইন করা হয়।

Test Methods এর গঠন

Test Methods টেস্ট ক্লাসের মধ্যে ডিফাইন করা হয় এবং @isTest বা testMethod ব্যবহার করা হয়। Test Method-এ Assertions ব্যবহার করে কাঙ্খিত ফলাফল যাচাই করা হয়।

@isTest
public class TestClassName {
    @isTest
    static void testMethod1() {
        // টেস্ট কোড এবং Assertions
    }
}
  • @isTest বা testMethod: এটি টেস্ট মেথডে ব্যবহৃত হয়, যা Test Method হিসেবে পরিচিত।
  • static: Test Method অবশ্যই static হতে হবে।

Test Data Creation

Test Methods সাধারণত টেস্টিংয়ের জন্য নিজস্ব ডেটা তৈরি করে, যা Production ডেটা ব্যবহার এড়াতে সাহায্য করে। Apex টেস্ট ক্লাসে তৈরি ডেটা মূল ডেটাবেসে জমা হয় না এবং তা সম্পূর্ণ আলাদা থাকে।

উদাহরণ: Test Data Creation

@isTest
public class AccountTest {
    @isTest
    static void testAccountCreation() {
        // টেস্ট ডেটা তৈরি
        Account acc = new Account(Name = 'Test Account');
        insert acc;

        // Assertions
        Account fetchedAcc = [SELECT Name FROM Account WHERE Id = :acc.Id];
        System.assertEquals('Test Account', fetchedAcc.Name, 'Account name should match');
    }
}
  • Test Data Creation: Test Method-এ নতুন Account রেকর্ড তৈরি করা হয়েছে, যা Test Database-এ সংরক্ষিত হয়।
  • System.assertEquals: Assertions ব্যবহার করে Account নাম যাচাই করা হয়েছে।

Test.startTest() এবং Test.stopTest() এর ব্যবহার

Test.startTest() এবং Test.stopTest() Salesforce-এ গভর্নর লিমিট রিফ্রেশ করে এবং Asynchronous প্রসেস ট্রিগার করার জন্য ব্যবহৃত হয়।

Test.startTest() এবং Test.stopTest() উদাহরণ

@isTest
public class AsyncTestExample {
    @isTest
    static void testFutureMethod() {
        Test.startTest();
        FutureExample.processFuture(); // Future Method কল
        Test.stopTest();
        
        // Assertions
        System.assert(true, 'Future method executed successfully');
    }
}
  • Test.startTest(): Async প্রসেস শুরু করার আগে Governor Limit রিফ্রেশ করে।
  • Test.stopTest(): Async প্রসেস চালানোর পরে Governor Limit বন্ধ করে।

Assertions এর ব্যবহার

Assertions টেস্ট রেজাল্ট যাচাই করতে ব্যবহৃত হয়, যা System.assertEquals(), System.assertNotEquals() এবং System.assert() মেথড ব্যবহার করে ফলাফল যাচাই করে। Assertions কোডের প্রত্যাশিত আউটপুট এবং আসল আউটপুটের মধ্যে মিল চেক করে।

উদাহরণ: Assertions

@isTest
public class AccountTest {
    @isTest
    static void testAccountName() {
        Account acc = new Account(Name = 'Sample Account');
        insert acc;

        Account fetchedAcc = [SELECT Name FROM Account WHERE Id = :acc.Id];
        System.assertEquals('Sample Account', fetchedAcc.Name, 'The account name should match');
    }
}
  • System.assertEquals: টেস্টিংয়ের জন্য রেকর্ডের নাম যাচাই করা হয়েছে, যা প্রত্যাশিত ফলাফল নিশ্চিত করে।

ভালো অনুশীলন

  1. যতটা সম্ভব বিভিন্ন কেস টেস্ট করুন: সাধারণ কেস এবং প্রান্তিক কেসসহ বিভিন্ন কেস পরীক্ষা করুন।
  2. Assertions ব্যবহার করুন: প্রত্যেক Test Method-এ Assertions যুক্ত করুন, যা টেস্টিংয়ের নির্ভুলতা নিশ্চিত করে।
  3. Test.startTest() এবং Test.stopTest() ব্যবহার করুন: Async প্রসেস ট্রিগার এবং গভর্নর লিমিট রিফ্রেশের জন্য Test.startTest() এবং Test.stopTest() ব্যবহার করুন।
  4. Code Coverage নিশ্চিত করুন: ১০০% কোড কাভারেজের লক্ষ্য রাখুন, যাতে ডেপ্লয়মেন্ট সহজ হয়।
  5. Exception Handling টেস্ট করুন: কোডে Exception Handling সঠিকভাবে কাজ করছে কিনা তা টেস্ট করুন।

Test Class এবং Test Method এর উদাহরণ

নিচে একটি Test Class এবং Test Method-এর পূর্ণ উদাহরণ দেয়া হলো:

public class AccountManager {
    public static void updateAccountIndustry(List<Id> accountIds) {
        List<Account> accounts = [SELECT Id, Industry FROM Account WHERE Id IN :accountIds];
        for (Account acc : accounts) {
            acc.Industry = 'Technology';
        }
        update accounts;
    }
}

@isTest
public class AccountManagerTest {
    @isTest
    static void testUpdateAccountIndustry() {
        // Test data creation
        Account acc = new Account(Name = 'Test Account');
        insert acc;

        // Method call and testing
        List<Id> accountIds = new List<Id>{acc.Id};
        AccountManager.updateAccountIndustry(accountIds);

        // Record refresh and validation
        Account updatedAcc = [SELECT Industry FROM Account WHERE Id = :acc.Id];
        System.assertEquals('Technology', updatedAcc.Industry, 'Industry field should be updated to Technology');
    }
}

সারসংক্ষেপ

Test Classes এবং Test Methods Apex ইউনিট টেস্টিংয়ের প্রধান উপাদান, যা কোডের সঠিকতা যাচাই করে এবং গভর্নর লিমিটের মধ্যে কোডের কার্যকারিতা নিশ্চিত করে। Assertions, Test.startTest(), এবং Test.stopTest() সহ বিভিন্ন টুল ব্যবহার করে Test Classes এবং Test Methods উন্নত এবং কার্যকরী করা যায়, যা Salesforce ডেভেলপমেন্টে একটি নির্ভুল এবং স্থিতিশীল পরিবেশ নিশ্চিত করে।

Content added By

Test Data Creation এবং @isTest Annotation

225
225

Test Data Creation এবং @isTest Annotation Salesforce-এর Apex Unit Testing-এ গুরুত্বপূর্ণ ভূমিকা পালন করে। Test Data Creation মূল ডেটাবেসে কোনো পরিবর্তন না করে শুধুমাত্র টেস্টিংয়ের জন্য প্রয়োজনীয় ডেটা তৈরি করে, আর @isTest Annotation ব্যবহার করে টেস্ট ক্লাস এবং মেথড চিহ্নিত করা হয়।


Test Data Creation

Salesforce প্ল্যাটফর্মে Unit Test চলাকালীন Test Data Creation করতে হয়, যা মূল ডেটাবেসের উপর নির্ভর না করে কেবল টেস্টিংয়ের জন্য ডেটা তৈরি করে। Test Data তৈরি করার সময় SeeAllData=false ব্যবহার করা হয়, যা নিশ্চিত করে যে টেস্ট চলাকালীন মূল ডেটাবেস ডেটা অ্যাক্সেস করা হবে না। Unit Test-এর সঠিকতা ও স্বাধীনতা বজায় রাখতে এটি অত্যন্ত গুরুত্বপূর্ণ।

Test Data Creation-এর কারণ

  1. মূল ডেটাবেসে পরিবর্তন না করা: Test Data Creation মূল ডেটাবেসে পরিবর্তন আনে না, তাই টেস্ট চলাকালীন ডেটা সুরক্ষিত থাকে।
  2. বিশ্বাসযোগ্য এবং পুনরায় ব্যবহারযোগ্য টেস্ট: নির্দিষ্ট টেস্ট ডেটা ব্যবহার করে টেস্ট পুনরায় চালানো সহজ হয় এবং এটি একই ফলাফল দেয়।
  3. Test Coverage নিশ্চিত করা: Test Data Creation করে সহজেই টেস্ট কভারেজ বাড়ানো যায়।

Test Data Creation উদাহরণ

নিচের উদাহরণে Account এবং Contact রেকর্ড তৈরি করে টেস্ট ডেটা প্রস্তুত করা হয়েছে।

@isTest
public class TestDataExample {
    public static Account createTestAccount() {
        Account acc = new Account(Name = 'Test Account', Industry = 'Technology');
        insert acc;
        return acc;
    }

    public static Contact createTestContact(Id accountId) {
        Contact con = new Contact(FirstName = 'John', LastName = 'Doe', Email = 'john.doe@example.com', AccountId = accountId);
        insert con;
        return con;
    }
}
  • createTestAccount: একটি Account রেকর্ড তৈরি করে এবং ডেটাবেসে ইনসার্ট করে।
  • createTestContact: Account আইডি ব্যবহার করে একটি Contact রেকর্ড তৈরি করে এবং ডেটাবেসে ইনসার্ট করে।

এভাবে TestDataExample ক্লাস ব্যবহার করে টেস্টের জন্য বিভিন্ন ক্লাসে টেস্ট ডেটা তৈরি ও পুনঃব্যবহার করা যায়।


@isTest Annotation

@isTest Annotation হলো Apex-এ টেস্ট ক্লাস ও মেথড চিহ্নিত করার জন্য ব্যবহৃত একটি অ্যানোটেশন। @isTest অ্যানোটেশন ব্যবহার করে টেস্টিং-এর জন্য নির্দিষ্ট মেথড বা ক্লাস চিহ্নিত করা যায়, যা প্রোডাকশন কোড থেকে আলাদা থাকে।

@isTest Annotation-এর ব্যবহার

  1. Test Class নির্দেশ করতে: @isTest অ্যানোটেশন টেস্ট ক্লাসের শুরুতে ব্যবহার করে পুরো ক্লাসকে টেস্ট ক্লাস হিসেবে চিহ্নিত করা যায়।
  2. Test Method নির্দেশ করতে: @isTest অ্যানোটেশন টেস্ট মেথডের শুরুতে ব্যবহার করা হয়, যাতে এই মেথডটি শুধুমাত্র টেস্টের জন্য চালানো হয়।
  3. SeeAllData=false ব্যবহার: @isTest অ্যানোটেশনের সাথে SeeAllData=false ব্যবহার করলে টেস্ট মেথডে মূল ডেটাবেসে থাকা কোনো ডেটা অ্যাক্সেস করা যাবে না, যা টেস্ট ডেটা নিরাপদ রাখে।

@isTest Annotation উদাহরণ

@isTest(SeeAllData=false)
public class AccountHandlerTest {

    // Test Method
    @isTest
    static void testUpdateAccountIndustry() {
        // Test Data তৈরি
        Account acc = new Account(Name = 'Tech Solutions', Industry = 'Healthcare');
        insert acc;

        // পরীক্ষিত মেথড কল
        AccountHandler.updateAccountIndustry(acc.Id, 'Technology');

        // আউটপুট যাচাই
        Account updatedAcc = [SELECT Industry FROM Account WHERE Id = :acc.Id];
        System.assertEquals('Technology', updatedAcc.Industry, 'Industry field did not update correctly');
    }
}
  • @isTest(SeeAllData=false): এই অ্যানোটেশন নিশ্চিত করে যে টেস্ট ডেটা তৈরি করার সময় মূল ডেটাবেস ডেটা অ্যাক্সেস করা হবে না।
  • @isTest: testUpdateAccountIndustry মেথডে @isTest অ্যানোটেশন ব্যবহার করা হয়েছে, যা মেথডটিকে টেস্ট মেথড হিসেবে চিহ্নিত করে।

SeeAllData=false এর গুরুত্ব

SeeAllData=false ব্যবহার করে নিশ্চিত করা হয় যে টেস্ট মেথড শুধুমাত্র টেস্ট ডেটা ব্যবহার করবে এবং মূল ডেটাবেস ডেটা অ্যাক্সেস করবে না। এটি টেস্ট ডেটার নির্ভরযোগ্যতা এবং নিরাপত্তা নিশ্চিত করে।

  1. পরিবর্তনশীল ডেটার প্রভাব থেকে রক্ষা: SeeAllData=false ব্যবহার করলে টেস্ট শুধুমাত্র নিজস্ব ডেটা নিয়ে কাজ করে, যার ফলে অন্য ডেটার পরিবর্তন টেস্টের উপর প্রভাব ফেলতে পারে না।
  2. Test Coverage বৃদ্ধি: এটি নিশ্চিত করে যে টেস্ট কভারেজ শুধুমাত্র প্রয়োজনীয় অংশেই সীমাবদ্ধ এবং নির্ভরযোগ্য।

ভালো অনুশীলন

  1. Test Data Creation Utility Class তৈরি করুন: Test Data Creation সহজ ও পুনরায় ব্যবহারযোগ্য করতে Utility Class ব্যবহার করা ভাল।
  2. SeeAllData=false সবসময় ব্যবহার করুন: টেস্টের নিরাপত্তা ও নির্ভরযোগ্যতা নিশ্চিত করতে SeeAllData=false ব্যবহার করুন।
  3. Test Coverage সর্বাধিক করুন: Test Data তৈরি করে টেস্ট কভারেজ বৃদ্ধি করুন এবং কমপক্ষে ৭৫% কভারেজ নিশ্চিত করুন।
  4. System.assert ব্যবহার করুন: টেস্ট রেজাল্ট যাচাই করতে System.assert() ব্যবহার করে আউটপুট যাচাই করুন।

সংক্ষেপে

  • Test Data Creation ইউনিট টেস্টের জন্য নির্দিষ্ট ডেটা তৈরি করে, যা মূল ডেটাবেসে কোনো পরিবর্তন আনে না।
  • @isTest Annotation টেস্ট ক্লাস ও মেথড চিহ্নিত করতে ব্যবহৃত হয় এবং প্রোডাকশন কোড থেকে আলাদা থাকে।
  • SeeAllData=false টেস্টের নিরাপত্তা ও নির্ভরযোগ্যতা নিশ্চিত করতে ব্যবহৃত হয়।

Apex Unit Testing-এ Test Data Creation এবং @isTest Annotation ব্যবহার করে উন্নত, নিরাপদ, এবং নির্ভরযোগ্য টেস্টিং নিশ্চিত করা যায়।

Content added By

Code Coverage এবং Best Practices

211
211

Code Coverage হলো Salesforce-এ Apex কোডের টেস্টিংয়ের একটি পরিমাপ, যা বোঝায় যে টেস্টিংয়ের মাধ্যমে মোট কোডের কত শতাংশ পরীক্ষিত হয়েছে। Salesforce-এ ডেপ্লয়মেন্টের জন্য ৭৫% কোড কাভারেজ আবশ্যক, কিন্তু সাধারণত সর্বোচ্চ কাভারেজ নিশ্চিত করা বাঞ্ছনীয়। কোড কাভারেজ বাড়ানোর মাধ্যমে কোডের নির্ভুলতা এবং কার্যকারিতা নিশ্চিত করা যায়।


Code Coverage এর প্রয়োজনীয়তা

  1. ডেপ্লয়মেন্ট রিকোয়ারমেন্ট: Salesforce-এ কোড ডেপ্লয় করার জন্য ন্যূনতম ৭৫% কোড কাভারেজ থাকতে হয়।
  2. ত্রুটি সনাক্তকরণ: কোডের ত্রুটি এবং বাগ সনাক্ত করতে সহায়ক।
  3. কোডের স্থায়িত্ব বৃদ্ধি: কোড কাভারেজ নিশ্চিত করে কোডের স্থায়িত্ব এবং স্কেলেবিলিটি বাড়ানো যায়।
  4. পরিবর্তনের ঝুঁকি কমানো: কোডে পরিবর্তন করার সময় ত্রুটি বা অনাকাঙ্ক্ষিত ফলাফল প্রতিরোধ করা যায়।

Code Coverage এবং Best Practices

Test Data Creation: Production ডেটার উপর নির্ভর না করে Test Method-এ টেস্ট ডেটা তৈরি করা উচিত। এটি নির্ভরযোগ্য টেস্টিংয়ের জন্য গুরুত্বপূর্ণ এবং Production ডেটাবেসে প্রভাব ফেলবে না।

@isTest
public class AccountTest {
    @isTest
    static void testAccountCreation() {
        Account acc = new Account(Name = 'Test Account');
        insert acc;

        System.assertEquals('Test Account', [SELECT Name FROM Account WHERE Id = :acc.Id].Name);
    }
}

Assertions ব্যবহার করুন: System.assert(), System.assertEquals(), এবং System.assertNotEquals() ব্যবহার করে প্রত্যাশিত আউটপুট যাচাই করা উচিত, যা টেস্টিংয়ের নির্ভুলতা নিশ্চিত করে।

System.assertEquals('ExpectedValue', actualValue, 'Message if test fails');

Test.startTest() এবং Test.stopTest() ব্যবহার করুন: Async প্রসেস এবং গভর্নর লিমিট রিফ্রেশের জন্য Test.startTest() এবং Test.stopTest() ব্যবহার করা উচিত।

Test.startTest();
// Async call or code that may affect governor limits
Test.stopTest();

Exception Handling টেস্ট করুন: কোডে Exception Handling সঠিকভাবে কাজ করছে কিনা তা নিশ্চিত করতে টেস্ট মেথডে Exception Handling যোগ করুন।

try {
    // Code that may throw exception
    System.assert(false, 'Exception expected but not thrown');
} catch (Exception e) {
    System.assert(true, 'Exception was thrown as expected');
}

Edge Cases টেস্ট করুন: সাধারণ পরিস্থিতি ছাড়াও এক্সট্রিম বা এজ কেসগুলোও টেস্ট করুন, যেমন নাল ইনপুট, শূন্য মান, বা বড় ডেটাসেট।

List<Account> emptyList = new List<Account>();
System.assertEquals(0, emptyList.size(), 'List should be empty');

Mocking ব্যবহার করুন (HTTP Callouts এর ক্ষেত্রে): External Callouts বা API কলের ক্ষেত্রে Mocking ব্যবহার করা উচিত, যাতে টেস্টিং চলাকালীন কলআউট কার্যকর না হয়।

Test.setMock(HttpCalloutMock.class, new MockHttpResponseGenerator());
@isTest
global class MockHttpResponseGenerator implements HttpCalloutMock {
    global HttpResponse respond(HttpRequest req) {
        HttpResponse res = new HttpResponse();
        res.setStatusCode(200);
        res.setBody('{"name": "Test"}');
        return res;
    }
}

Bulk Testing: Bulk DML অপারেশন বা Bulk SOQL Query চলাকালীন কোডের পারফরম্যান্স যাচাই করুন। এটি নিশ্চিত করবে যে কোড বড় ডেটাসেট পরিচালনা করতে সক্ষম কিনা।

List<Account> accList = new List<Account>();
for (Integer i = 0; i < 200; i++) {
    accList.add(new Account(Name = 'Test Account ' + i));
}
insert accList;

Utility Methods টেস্ট করুন: কোডের প্রতিটি ছোট ফাংশন বা ইউটিলিটি মেথডের জন্য আলাদা টেস্ট মেথড লিখুন, যাতে সকল লজিক কভার হয়।

@isTest
static void testUtilityMethod() {
    Integer result = UtilityClass.add(2, 3);
    System.assertEquals(5, result, 'Utility method should return correct sum');
}

Avoid Hardcoded IDs: টেস্ট মেথডে হার্ডকোডেড আইডি এড়িয়ে চলুন, কারণ এটি পরিবেশভেদে পরিবর্তিত হতে পারে। পরিবর্তে, টেস্ট ডেটা তৈরি করে তার আইডি ব্যবহার করুন।

Run Tests Regularly: Deployment এর সময় বা কোডে বড় পরিবর্তন আসলে সব টেস্ট ক্লাস এবং মেথড চালান, যাতে কোড পরিবর্তনে কোনো সমস্যা না হয়।


Code Coverage এর ভালো অনুশীলন

  • 100% Code Coverage এর লক্ষ্য রাখুন: Salesforce-এ ডেপ্লয়মেন্টের জন্য ৭৫% কোড কাভারেজ প্রয়োজন হলেও সর্বোচ্চ কাভারেজের লক্ষ্য রাখুন।
  • System.debug() ব্যবহার এড়িয়ে চলুন: টেস্ট কোডে System.debug() ব্যবহার না করাই ভালো, এটি প্রডাকশন কোডে অনুপস্থিত থাকবে।
  • সহজ এবং স্পষ্ট Test Method নামকরণ করুন: Test Method নামকরণের সময় কার্যপ্রবাহ বর্ণনা করুন, যাতে এটি পড়ে বোঝা যায় কী পরীক্ষা করা হচ্ছে।

Code Coverage উদাহরণ

public class AccountManager {
    public static void updateAccountIndustry(List<Id> accountIds) {
        List<Account> accounts = [SELECT Id, Industry FROM Account WHERE Id IN :accountIds];
        for (Account acc : accounts) {
            acc.Industry = 'Technology';
        }
        update accounts;
    }
}

@isTest
public class AccountManagerTest {
    @isTest
    static void testUpdateAccountIndustry() {
        Account acc = new Account(Name = 'Test Account');
        insert acc;

        List<Id> accountIds = new List<Id>{acc.Id};
        AccountManager.updateAccountIndustry(accountIds);

        Account updatedAcc = [SELECT Industry FROM Account WHERE Id = :acc.Id];
        System.assertEquals('Technology', updatedAcc.Industry, 'Industry field should be updated to Technology');
    }
}
  • Code Coverage: AccountManager ক্লাসের সমস্ত লজিক টেস্ট হয়েছে, যা সর্বাধিক কাভারেজ নিশ্চিত করেছে।

সারসংক্ষেপ

Code Coverage Apex টেস্টিংয়ের একটি গুরুত্বপূর্ণ অংশ, যা Salesforce ডেপ্লয়মেন্টের জন্য প্রয়োজনীয়। সর্বাধিক কোড কাভারেজ নিশ্চিত করতে Assertions, Bulk Testing, Edge Cases, এবং Utility Methods টেস্টিং অন্তর্ভুক্ত করা উচিত। সঠিক কোড কাভারেজ নিশ্চিত করে Salesforce প্ল্যাটফর্মে একটি কার্যকরী এবং নির্ভুল ডেপ্লয়মেন্ট পরিবেশ তৈরি করা যায়।

Content added By
Promotion